package cn.fldong.service;

import cn.fldong.model.Score;
import java.sql.SQLException;
import java.util.List;
import java.math.BigDecimal;
import java.util.Date;

/**
 * ScoreService接口，定义成绩相关的业务逻辑操作
 */
public interface ScoreService {
    /**
     * 根据成绩ID查询成绩
     * @param scoreId 成绩ID
     * @return 成绩对象
     * @throws SQLException 数据库操作异常
     */
    Score getScoreById(String scoreId) throws SQLException;
    
    /**
     * 根据学生ID查询成绩
     * @param studentId 学生ID
     * @return 成绩列表
     * @throws SQLException 数据库操作异常
     */
    List<Score> getScoresByStudentId(String studentId) throws SQLException;
    
    /**
     * 根据课程ID查询成绩
     * @param courseId 课程ID
     * @return 成绩列表
     * @throws SQLException 数据库操作异常
     */
    List<Score> getScoresByCourseId(String courseId) throws SQLException;
    
    /**
     * 根据学生ID和课程ID查询成绩
     * @param studentId 学生ID
     * @param courseId 课程ID
     * @return 成绩对象
     * @throws SQLException 数据库操作异常
     */
    Score getScoreByStudentAndCourse(String studentId, String courseId) throws SQLException;
    
    /**
     * 查询所有成绩
     * @return 成绩列表
     * @throws SQLException 数据库操作异常
     */
    List<Score> getAllScores() throws SQLException;
    
    /**
     * 添加成绩
     * @param score 成绩对象
     * @return 添加成功返回true，否则返回false
     * @throws SQLException 数据库操作异常
     */
    boolean addScore(Score score) throws SQLException;
    
    /**
     * 更新成绩
     * @param score 成绩对象
     * @return 更新成功返回true，否则返回false
     * @throws SQLException 数据库操作异常
     */
    boolean updateScore(Score score) throws SQLException;
    
    /**
     * 删除成绩
     * @param scoreId 成绩ID
     * @return 删除成功返回true，否则返回false
     * @throws SQLException 数据库操作异常
     */
    boolean deleteScore(String scoreId) throws SQLException;
    
    /**
     * 验证学生课程成绩是否已存在
     * @param studentId 学生ID
     * @param courseId 课程ID
     * @return 存在返回true，否则返回false
     * @throws SQLException 数据库操作异常
     */
    boolean scoreExists(String studentId, String courseId) throws SQLException;
    
    /**
     * 计算学生课程成绩等级
     * @param scoreValue 分数值
     * @return 成绩等级(A/B/C/D/E/F)
     */
    String calculateGrade(BigDecimal scoreValue);
}